package wissenswert;
import java.lang.reflect.*;

public class Tester{
  public static Method naechste;
  public static Method getZiffer;
  public static Method plusse;
  public static Method minusse;

  public static void main(String[] args) throws Exception{
    //Name des zu testenden Programms zur Compilezeit noch unbekannt
    Class<?> klasse=Class.forName(args[0]);
    //Methodennamen sind aber vereinbart (im Prinzip auch parametrisierbar)
    naechste=klasse.getMethod("naechste",Integer.TYPE);
    getZiffer=klasse.getMethod("getZiffer",Integer.TYPE,Integer.TYPE);
    plusse=klasse.getMethod("plusse",Integer.TYPE,Integer.TYPE);
    minusse=klasse.getMethod("minusse",Integer.TYPE,Integer.TYPE);

    // Tests
    System.out.println(naechste(122)+" "+naechste(2998));

    System.out.print(getZiffer(246,0)+" ");
    System.out.print(getZiffer(246,1)+" ");
    System.out.print(getZiffer(246,2)+" ");
    System.out.println(getZiffer(246,3));

    System.out.print(plusse(2603,1458)+" ");
    System.out.print(plusse(2603,0326)+" ");
    System.out.print(plusse(2603,2187)+" ");
    System.out.println(plusse(2603,2603)+" ");

    System.out.print(minusse(2603,1458)+" ");
    System.out.print(minusse(2603,2603)+" ");
    System.out.print(minusse(2603,2187)+" ");
    System.out.println(minusse(2603,0326)+" ");
  }

  public static int naechste(int alt) throws Exception{
    return (Integer)naechste.invoke(null,alt);
  }

  public static int getZiffer(int zahl, int s) throws Exception{
    return (Integer)getZiffer.invoke(null, zahl, s);
  }

  public static int plusse(int kandidat, int probe) throws Exception{
    return (Integer)plusse.invoke(null, kandidat, probe);
  }

  public static int minusse(int kandidat, int probe) throws Exception{
    return (Integer)minusse.invoke(null, kandidat, probe);
  }
}

